import os
import sys
from PyQt5.uic import *
from PyQt5 import QtGui,QtWidgets,QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import datetime
from storeLabel import *

# TODO:
#  1、权限相关的问题需要解决，防到 C 盘下没有权限创建 test.pkl 文件导致程序无法启动
#  2、批量修改功能尉氏县
#  3、界面的美化
#  4、打包后的程序多少有点大不知道为啥
#  4、目前能想到的就这么多了毕竟是在边学边做:)


if os.path.exists('./test.pkl'):
    # 载入标签
    itemList = readVar('./test.pkl')
else:
    # 创建标签
    defaultlabel = ['1','2','3','4','5','6','7','8']
    writeVar('./test.pkl',defaultlabel)
    # 载入标签
    itemList = readVar('./test.pkl')

# 主窗口
class MainWindow(QtWidgets.QMainWindow):
    # python 中的构造函数当对象被创建的时候就会被调用，给创建的对象进行赋值等操作
    def __init__(self) -> None:
        super(MainWindow, self).__init__()
        loadUi(r'.\test.ui',self)
        # 用来保存信心的变量
        self.flag = ''
        self.filePath = ''
        self.fileName = ''
        self.curTime = ''

        # UI相关的设置
        self.setAcceptDrops(True)
        self.testPushButton.setText("修改标签")
        self.testPushButton.clicked.connect(self.ChangeAndAdd)
        self.comboBox.addItems(itemList)
        self.pushButton_2.setText("打时间戳")
        self.pushButton_2.clicked.connect(self.addTime)
        self.pushButton.setText("打标签")
        self.pushButton.clicked.connect(self.addLabel)
        self.comboBox.setAcceptDrops(True)
        self.textBrowser.setTabletTracking(True)
        self.comboBox.currentIndexChanged.connect(self.selectionchange)
        self.show()

    # 拽入事件的识别
    def dragEnterEvent(self, event):
        print((event.mimeData().urls())[0].toLocalFile())
        self.textBrowser.setText('识别到文件:\n' + os.path.basename((event.mimeData().urls())[0].toLocalFile()))
        self.filePath = os.path.dirname((event.mimeData().urls())[0].toLocalFile())
        self.fileName = os.path.basename((event.mimeData().urls())[0].toLocalFile())

    # 修改文件的名称
    def changeFilename(self,str):
        if str == 'label':
            print(os.path.join(self.filePath,'['+self.flag+']'+self.fileName))
            os.rename(os.path.join(self.filePath,self.fileName),os.path.join(self.filePath,'['+self.flag+']'+self.fileName))
            self.textBrowser.setText("打标签成功！"+os.path.join(self.filePath,'['+self.flag+']'+self.fileName))
        elif str == 'date':
            print(os.path.join(self.filePath,'['+self.curTime+']'+self.fileName))
            os.rename(os.path.join(self.filePath,self.fileName),os.path.join(self.filePath,'['+self.curTime+']'+self.fileName))
            self.textBrowser.setText("打时间戳成功！"+os.path.join(self.filePath,'['+self.curTime+']'+self.fileName))
    
    # 打时间戳
    def addTime(self):
        try:
            current_date = datetime.datetime.now().strftime('%m-%d')
            self.curTime = current_date
            self.changeFilename("date")
        except Exception as e:
            self.textBrowser.setText("<font color={}>打时间戳错误！\n {}</font>".format('red',repr(e)))

    def addLabel(self):
        try:
            print(self.flag)
            if self.flag != '':
            #    self.textBrowser.setText(self.flag)
                self.changeFilename('label')
        except Exception as e:
            print(repr(e))
            self.textBrowser.setText("<font color={}>打标签错误！\n------------\n {}</font>".format('red',repr(e)))
    
    def selectionchange(self):
        # TODO 学习 comboBox ，问题:要点了向下箭头并选择除了第一个标签才行
        # self.textBrowser.setText(self.comboBox.currentText())
        self.flag = self.comboBox.currentText()
    
    # 用来更新 comboBox 中的内容
    def genNewWin(self):
        self.comboBox.clear()
        self.comboBox.addItems(itemList)
    
    # 用来显示第二个界面
    def ChangeAndAdd(self):
        sw = changeAndAddBox()
        sw.my_Signal.connect(self.active_exit)

    def active_exit(self):
        # 将下拉标签栏清空
        self.comboBox.clear()
        # 重新添加修改后的标签
        self.comboBox.addItems(itemList)

# 修改标签窗口  
class changeAndAddBox(QtWidgets.QMainWindow):
    def __init__(self) -> None:
        super(changeAndAddBox,self).__init__()
        # 要在load函数的输入参数中添加self参数否则窗口会闪退（还没整明白）
        self.ui = loadUi(r'.\changeAndAddBox.ui',self)
        self.ui.setFixedSize(self.ui.width(), self.ui.height())

        # 注意 addItems 与 addItem 之间的区别: 一个数加一个数组另一个是加一个元素，无非就是一次加一个和加一堆的区别
        self.ui.listWidget.addItems(itemList)
        self.ui.listWidget.itemClicked.connect(self.listIsClicked)
        self.flag = 0
        self.ui.show()

    def listIsClicked(self,item):
        # 获取当前点击的 item 的行号
        con = self.ui.listWidget.currentRow()

        #  QInputDialog 输入弹窗
        text, okPressed = QInputDialog.getText(self, "修改标签","新的标签名:", QLineEdit.Normal, "")
        item.setText(text)

        # 修改被点击的 item 的内容为输入的内容，然后将修改后的 itemList 持久化保存在 ./test.pkl 中
        itemList[con] = text
        writeVar('./test.pkl',itemList)
        self.flag = 1
    
    # 让多窗口之间传递信号 刷新主窗口信息（这部分后面有空得仔细研究研究）
    # 参考 https://blog.csdn.net/weixin_43407838/article/details/91609590
    my_Signal = QtCore.pyqtSignal(str)

    def sendEditContent(self):
        content = '1'
        self.my_Signal.emit(content)

    def closeEvent(self, event):
        self.sendEditContent()
        

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    a = MainWindow()
    sys.exit(app.exec_())
    